package com.example.demo.config;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

/**
 * 加密解密(加盐算法)
 */
public class EncryptionTool {

    /**
     * 加密
     * @param password
     */
    public static String encrypt(String password) {
        //生成盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        //盐值和密码整体使用 MD5 加密
        String startPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        //生成最终密码(约定分隔符$，便于解密时得到盐值)
        String endPassword = salt + "$" + startPassword;
        return endPassword;
    }


    /**
     * 加密(用于解密，对比加密后的密码与用户输入是否一致)
     * @param password
     */
    private static String encrypt(String salt, String password) {
        //盐值和密码整体使用 MD5 加密
        String startPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        //生成最终密码(约定分隔符$，便于解密时得到盐值)
        String endPassword = salt + "$" + startPassword;
        return endPassword;
    }

    /**
     * 解密：检测用户输入和数据库中的密码是否一致
     * @return
     */
    public static boolean check(String inputPassword, String endPassword) {
        if(StringUtils.hasLength(inputPassword) && StringUtils.hasLength(endPassword) &&
                endPassword.length() == 65) {
            //获取盐值
            String salt = endPassword.split("\\$")[0];
            return encrypt(salt, inputPassword).equals(endPassword);
        }
        return false;
    }

}

//class Main {
//    public static void main(String[] args) {
//        String input = "123";
//        String end = EncryptionTool.encrypt(input);
//        System.out.println(end);
//        String input2 = "153";
//        String input3 = "123";
//        System.out.println(EncryptionTool.check(input2, end));
//        System.out.println(EncryptionTool.check(input3, end));
//    }
//}
